/********************************************************************************
 * Project Name		[JavaSE_Fundamentals]
 * File Name     	[TestFileReaderWriter.java]
 * Creation Date 	[2015-01-01]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ********************************************************************************/
package io.api;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * java.io.FileReader测试<br/>
 * java.io.FileWriter测试<br/>
 * 
 * 使用FileWriter时<br/>
 * 如果目标文件不存在, 则会自动创建目标文件<br/>
 * 如果目标文件已存在, 默认会先清空文件中的数据, 然后再写入数据<br/>
 * 如果目标文件已存在, 需要追加数时应使用new FileWriter(File, true)构造方法<br/>
 * FileWriter内部是维护了一个大小为1024的字符数组<br/>
 * 使用FileWriter写数据时会先写入到它内部维护的字符数组中<br/>
 * 如果需要把数据真正写到硬盘上, 需要调用flush或close方法, 或者是填满了内部的字符数组<br/>
 * 
 * 使用字符流的应用场景: 如果是读写字符数据的时候则使用字符流<br/>
 * 使用字节流的应用场景: 如果读写的数据都不需要转换成字符的时候, 则使用字节流, 如图片<br/>
 * 
 * @author 不落的太阳(Sean Yang aka ShortPeace)
 * @version 1.0
 * @since jdk 1.8
 * 
 */
public class TestFileReaderWriter {

	/**
	 * 使用FileReader & FileWriter拷贝文件
	 * 
	 * @param fileSource
	 * @param fileDest
	 */
	public static void copyFileByReaderWriter(String fileSource, String fileDest) {
		FileReader in = null;
		FileWriter out = null;

		try {
			in = new FileReader(fileSource);
			out = new FileWriter(fileDest);

			char[] buffer = new char[1024];
			int length = 0;
			while ((length = in.read(buffer)) != -1) {
				out.write(buffer, 0, length);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				// 先关闭输出流, 再关闭输入流
				if (out != null) {
					out.close();
				}
				if (in != null) {
					in.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
